/*这个类用来实现邮件的发送功能，1：纯文本邮件的发送；2：html格式邮件的发送。
两种方法都可用，先选择第二种方法*/
package common.util.mail;

import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/** 
* 简单邮件（不带附件的邮件）发送器
*/
public class SimpleMailSender{
	/** 
	　 * 以文本格式发送邮件　　 
	　 * @param mailInfo 待发送的邮件的信息　　 
	　 */
		public boolean sendTextMail(MailSenderInfo mailInfo){
			//判断是否需要身份认证　
			MyAuthenticator authenticator = null;
			Properties props = mailInfo.getProperties(); 
			if (mailInfo.isValidate()){
				//如果需要身份认证，则创建一个密码验证器
				authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassWord());
			}
			// 根据邮件会话属性和密码验证器构造一个发送邮件的session　　　 
			Session sendMailSession = Session.getDefaultInstance(props, authenticator);
			sendMailSession.setDebug(true);
			try {
				// 根据session创建一个邮件消息　　　 
				MimeMessage mailMessage = new MimeMessage(sendMailSession);
				// 创建邮件发送者地址　　　 
				Address from = new InternetAddress(mailInfo.getFromAddress());
				// 设置邮件消息的发送者　　　 
				mailMessage.setFrom(from);
				//创建邮件的接收者地址，并设置到邮件消息中
				Address to=new InternetAddress(mailInfo.getToAddress());
				mailMessage.setRecipient(Message.RecipientType.TO,to);
				//设置邮件消息的主题　　　
				mailMessage.setSubject(mailInfo.getSubject());
				//设置邮件消息的主要内容
				String mailContent=mailInfo.getContent();
				mailMessage.setText(mailContent);
				mailMessage.setSentDate(new Date());//设置邮件消息发送的时间
				mailMessage.saveChanges();
				//Transport.send(mailMessage);发送邮件
				Transport transport=sendMailSession.getTransport("smtp");
				transport.connect("smtp.126.com","nongchanpinxm","2012904");//以smtp方式登录邮箱
				transport.sendMessage(mailMessage,mailMessage.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
				transport.close();
				return true;
			}catch(MessagingException ex){
				ex.printStackTrace();
			}
			return false;
		}
			/***
	　　　　　*以HTML格式发送邮件　　
	　　　　　*@parammailInfo待发送的邮件信息　　
	　　　　　*/
		
			public boolean sendHtmlMail(MailSenderInfo mailInfo){
				//判断是否需要身份认证　　　
				MyAuthenticator authenticator=null;
				Properties props=mailInfo.getProperties();
				//如果需要身份认证，则创建一个密码验证器　　　　
				if(mailInfo.isValidate()){
					authenticator=new MyAuthenticator(mailInfo.getUserName(),mailInfo.getPassWord());
				}
				//根据邮件会话属性和密码验证器构造一个发送邮件的session　　　
				Session sendMailSession=Session.getDefaultInstance(props,authenticator);
				sendMailSession.setDebug(true);
				try{
					//根据session创建一个邮件消息　　　
					Message mailMessage=new MimeMessage(sendMailSession);
					//创建邮件发送者地址　　　
					Address from=new InternetAddress(mailInfo.getFromAddress());
					//设置邮件消息的发送者　　　
					mailMessage.setFrom(from);
					//创建邮件的接收者地址，并设置到邮件消息中　　　
					Address to=new InternetAddress(mailInfo.getToAddress());
					//Message.RecipientType.TO属性表示接收者的类型为TO　　　
					mailMessage.setRecipient(Message.RecipientType.TO,to);
					//设置邮件消息的主题　　　
					mailMessage.setSubject(mailInfo.getSubject());
					//设置邮件消息发送的时间　　　
					mailMessage.setSentDate(new Date());
					//MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象　　　
					Multipart mainPart=new MimeMultipart();
					//创建一个包含HTML内容的MimeBodyPart
					MimeBodyPart mbp=new MimeBodyPart();
					//设置HTML内容
					mbp.setContent(mailInfo.getContent(),"text/html;charset=UTF-8");
					mainPart.addBodyPart(mbp);
					//将MiniMultipart对象设置为邮件内容　　　
					mailMessage.setContent(mainPart);
					mailMessage.saveChanges();
					//发送邮件Transport.send(mailMessage);
					Transport transport=sendMailSession.getTransport("smtp");
					transport.connect("smtp.126.com","nongchanpinxm","2012904");//以smtp方式登录邮箱
					transport.sendMessage(mailMessage,mailMessage.getAllRecipients());//发送邮件,其中第二个参数是所有已设好的收件人地址
					//transport.close();					
					return true;
				}catch(MessagingException ex){
					ex.printStackTrace();
				}
				return false;
			}
	}